class Observe{
    constructor(data){
        this.walk(data)
    }
    walk(data){
        // 1 判断data是否对象或者是空
        // 2遍历data的对象
        if(!data || typeof data!=='object'){
            return 
        }
        Object.keys(data).forEach(key=>{
            this.defineReactive(data,key,data[key])
        })
    }

    defineReactive(obj,key,val){
        let that=this
        let dep=new Dep()
        this.walk(val) //如果data的val也是对象 也要让它变成响应式数据
        Object.defineProperty(obj,key,{
            enumerable:true,
            configurable:true,
            get(){
                Dep.target && dep.addSub(Dep.target)
                return val
            },
            set(newValue){
                if(val===newValue){
                    return 
                }
                val=newValue
                debugger
                //如果之前的值变成了对象 就要从新让它变成响应式数据
                that.walk(val)
                // 发送通知
                dep.notify()
            }
        })
    }
}